/* Copyright (c) 2004-2024 peigen.info. All rights reserved. */

package info.peigen.hotpot.business.account.manage.form;

import info.peigen.hotpot.business.account.facade.enums.AccountTransCode;
import info.peigen.hotpot.common.core.enums.Currency;
import info.peigen.hotpot.common.core.lang.money.Money;
import info.peigen.hotpot.common.service.base.manage.ManageFormBase;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import lombok.experimental.SuperBuilder;

import java.util.Date;

/**
 * <b>(AccountTransLogManageCreateForm)</b>
 * 管理后台 创建"账户交易流水记录"表单
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2023-08-30
 */
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Accessors(chain = true)
public class AccountTransLogManageCreateForm extends ManageFormBase {
    /** 账户交易流水Id */
    @Size(max = 30)
    String           transLogId;
    /** 交易Id */
    @Size(max = 30)
    String           tradeId;
    /** 交易代码 */
    @Size(max = 50)
    AccountTransCode transCode;
    /** 借记-账户Id */
    @Size(max = 30)
    String           debitAccountId;
    /** 贷记-账户Id */
    @Size(max = 30)
    String           creditAccountId;
    /** 借记-账户记录Id */
    @NotEmpty
    @Size(max = 30)
    String           debitAccountLogId;
    /** 贷记-账户记录Id */
    @NotEmpty
    @Size(max = 30)
    String           creditAccountLogId;
    /** 被收费账户记录Id */
    @NotEmpty
    @Size(max = 30)
    String           feePayerAccountLogId;
    /** 收费账户记录Id */
    @NotEmpty
    @Size(max = 30)
    String           feePayeeAccountLogId;
    /** 交易金额 */
    @Size(max = 65)
    Money            transAmount;
    /** 交易金额币种 */
    @NotNull
    @Size(max = 3)
    Currency         transAmountCurrency;
    /** 交易时间 */
    @NotNull
    @Size(max = 40)
    Date             transTime;
    /** 清算时间;有别与交易时间,应是实际资金清算系统提供的交易完成时间,视为清算时间 */
    @NotNull
    @Size(max = 40)
    Date             settleTime;
    /** 备注 */
    @NotEmpty
    @Size(max = 200)
    String           memo;
    /** 逻辑删除标记 */
    @NotNull
    Integer          enable;
}